/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tools;

import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 *
 * @author Aikon
 */
public class ArrayUtils {
    public static Object expand(Object a, int plus) {

            Class cl = a.getClass();
            if (!cl.isArray()) return null;
            int length = Array.getLength(a);
            int newLength = length + plus; 
            Class componentType = a.getClass().getComponentType();
            Object newArray = Array.newInstance(componentType, newLength);
            System.arraycopy(a, 0, newArray, 0, length);

            return newArray;

        
    }
    //imprimir els elements dun array de string
    public static void printArrayString (String [] in){
        for(String aux : in)
            System.out.println(aux);
    }
    /**
     * @brief Aquesta funció permet imprimir tots els components(att) d'una clase
     * 
     * Desafortunadament no puc crear la funció estatica ja que un static no pot interactuar amb instancies
     * 
     * @param in
     * @param att 
     *      És la funció que caldrà cridar a cada component del array
     * @throws ClassNotFoundException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException 
     */
    public void printArrayAttribute (Object [] in, String att) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        for(Object aux : in){
            String nameMethod = att;
            if(aux != null){
                Class c = aux.getClass();
                Method [] pruebaMethod = c.getMethods();

                for(int i=0; i<pruebaMethod.length;i++) {
                    if (nameMethod.equals(pruebaMethod[i].getName())){
                            try{
                                System.out.println(pruebaMethod[i].invoke(aux));
                            }catch(NullPointerException e){
                            }
                        break;
                    }
                }
            }
        }
    }

}
